package com.team01.pokemon.service;

import com.team01.pokemon.entity.Moves;
import com.team01.pokemon.vo.MovesDetailVO;
import com.team01.pokemon.vo.MovesQueryVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 招式表 服务类
 * </p>
 *
 * @author author
 * @since 2025-09-13
 */
public interface MovesService extends IService<Moves> {

    /**
     * 根据查询条件获取技能列表
     * 
     * @param queryVO 查询参数
     * @return 技能详情列表
     */
    List<MovesDetailVO> queryMoves(MovesQueryVO queryVO);

    /**
     * 获取所有技能（按编号排序）
     * 
     * @return 技能详情列表
     */
    List<MovesDetailVO> getAllMoves();

    /**
     * 根据宝可梦名称查询其可学习的技能
     * 
     * @param pokemonName 宝可梦名称
     * @param learnMethod 学习方式（可选）
     * @param minLevel    最小等级（可选）
     * @param maxLevel    最大等级（可选）
     * @return 技能详情列表
     */
    List<MovesDetailVO> getMovesByPokemonName(String pokemonName, String learnMethod, Integer minLevel,
            Integer maxLevel);

    /**
     * 根据宝可梦ID查询其可学习的技能
     * 
     * @param pokemonId   宝可梦ID
     * @param learnMethod 学习方式（可选）
     * @param minLevel    最小等级（可选）
     * @param maxLevel    最大等级（可选）
     * @return 技能详情列表
     */
    List<MovesDetailVO> getMovesByPokemonId(Integer pokemonId, String learnMethod, Integer minLevel,
            Integer maxLevel);

    /**
     * 根据属性名称查询该属性的所有技能
     * 
     * @param typeName 属性名称
     * @return 技能详情列表
     */
    List<MovesDetailVO> getMovesByTypeName(String typeName);

    /**
     * 根据技能名称搜索技能
     * 
     * @param moveName 技能名称
     * @return 技能详情列表
     */
    List<MovesDetailVO> getMovesByMoveName(String moveName);

    /**
     * 根据等级区间查询技能
     * 
     * @param minLevel    最小等级
     * @param maxLevel    最大等级
     * @param learnMethod 学习方式（可选）
     * @return 技能详情列表
     */
    List<MovesDetailVO> getMovesByLevelRange(Integer minLevel, Integer maxLevel, String learnMethod);

}
